/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ourMessage;

import java.io.*;
import java.net.InetAddress;

/**
 *
 * @author abdala
 */
public abstract class Message implements Serializable{
    
    /**
     *serialVersionUID est utilisé lors de la désérialisation pour vérifier que les données de la sérialisation sont compatibles, relativement aux règles de la sérialisation, avec la classe chargée. 
     * Lors de la désérialisation cette valeur est comparée avec celle du champ serialVersionUID de la classe correspondante. 
     * Si les deux valeurs sont différentes alors la désérialisation lève une exception de type InvalidClassException.
     **/
    private static final long serialVersionUID = 31400L;
    protected String login; 
    
    
    public Message(String login) { 
        this.login = login;
        
        
    }
    
        
    public String getlogin() {
        return login;
    }
    public void setlogin(String login) {
        this.login = login;
    }
   
    @Override
    public String toString() {
        return "Message from " + login;
    }   
    
    /*
     ** La methode toArray(msg) suivante nous permettra de sérialiser un objet (on prend en entrée un message, on en ressort un tableau de bytes)
     */
    public static byte[] toArray(Message msg) throws IOException{
        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
        ObjectOutputStream objectOut = new ObjectOutputStream(byteOut);
        objectOut.writeObject(msg);
        objectOut.close(); 
        
        byte[] flux = byteOut.toByteArray();
        
        //objectOut.close();
        byteOut.close();
        // retourne un tableau d'octet
        return flux; 
    }
    
     /*
     ** La methode fromArray(array) suivante nous permettra de désérialiser un objet (précédemment sérialisé): on prend en entrée un tableau de byte, on en ressort un message!
     */
    
    public static Message fromArray(byte[] array) throws IOException, ClassNotFoundException{
        ByteArrayInputStream byteIn = new ByteArrayInputStream(array);
        ObjectInputStream objectIn = new ObjectInputStream(byteIn);
        
        Message msg;
        msg = (Message)objectIn.readObject();
        
        return msg; 
    }
    
}
